home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 140
/
Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z
/
Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin
/
tools
/
xpicw
/
xpicw110.lzh
/
WLSource
/
up2.s
< prev
next >
Wrap
Text File
|
1997-04-10
|
2KB
|
144 lines
* up2.s
* 上スクロールその2 / 最高速 = 5
* by Mitsuky
SPEED_MAX equ 5
.offset 8 * 引き数
_source_ptr: .ds.l 1
_dest_ptr: .ds.l 1
_speed: .ds.l 1
_vdisp: .ds.l 1
TRANS32 .macro num * 32 バイト転送マクロ
movem.l num(a3),d0-d3/a0-a2/a5
movem.l d0-d3/a0-a2/a5,-(a4)
.endm
.text
.even
.dc.b 'WL10',$0d,$0a
.dc.b '上スクロールその2 / 最高速 = 5',$0d,$0a
.dc.b ' by Mitsuky',$0d,$0a
.dc.b $1a
.even
up2:
link a6,#0
movem.l d1-d7/a0-a5,-(sp)
move.l _speed(a6),d0 * d0.w =
bmi up2_ask_speed
cmpi.l #SPEED_MAX,d0
bhi up2_err
tst.l _vdisp(a6)
bmi up2_ask_vdisp
moveq.l #1,d5
lsl.w d0,d5
move.l #512,d7
sub.w d5,d7 * d7.l = スクロール座標
subq.w #1,d5 * d5.w = V-SYNC 当たりのループ回数-1
move.w #512,d6
lsr.w d0,d6
subq.w #1,d6 * d6.w = ループ回数-1
movea.l _source_ptr(a6),a3
movea.l _dest_ptr(a6),a4
adda.l #512*512*2-32,a3 * a3.l = 転送元アドレス
adda.l #512*512*2,a4 * a4.l = 転送先アドレス
loop:
bsr vdisp
move.w d5,d4 * d5.w =
loop_y2:
TRANS32 0 * HAS ver3.x なら 0(a3) は (a3) に最適化される
TRANS32 -32*1
TRANS32 -32*2 * 上スクロールは速度的に一番厳しいので
TRANS32 -32*3 * ループ展開
TRANS32 -32*4
TRANS32 -32*5
TRANS32 -32*6
TRANS32 -32*7
TRANS32 -32*8
TRANS32 -32*9
TRANS32 -32*10
TRANS32 -32*11
TRANS32 -32*12
TRANS32 -32*13
TRANS32 -32*14
TRANS32 -32*15
TRANS32 -32*16
TRANS32 -32*17
TRANS32 -32*18
TRANS32 -32*19
TRANS32 -32*20
TRANS32 -32*21
TRANS32 -32*22
TRANS32 -32*23
TRANS32 -32*24
TRANS32 -32*25
TRANS32 -32*26
TRANS32 -32*27
TRANS32 -32*28
TRANS32 -32*29
TRANS32 -32*30
TRANS32 -32*31
subq.w #1,d7
lea.l -1024(a3),a3
dbra d4,loop_y2
dbra d6,loop
up2_rts:
moveq.l #0,d0
up2_rts_2:
movem.l (sp)+,d1-d7/a0-a5
unlk a6
rts
**** ****
vdisp:
movem.l a0,-(sp)
move.l _vdisp(a6),a0
jsr (a0)
movem.l (sp)+,a0
rts
**** ****
up2_err:
moveq.l #-1,d0
bra up2_rts_2
**** ****
up2_ask_speed:
moveq.l #SPEED_MAX,d0
bra up2_rts_2
**** ****
up2_ask_vdisp:
move.l _speed(a6),d0
lea.l ask_vdisp_table(pc),a0
add.w d0,d0
move.w (a0,d0.w),d0
bra up2_rts_2
ask_vdisp_table:
.dc.w 512,256,128,64,32,16